package com.ryskoo.controller.producttemplateattr;

import com.ryskoo.basicdata.industry.domain.IndustryPO;
import com.ryskoo.basicdata.industry.service.IIndustryService;
import com.ryskoo.catering.producttemplateattr.domain.ProductTemplateAttrPO;
import com.ryskoo.catering.producttemplateattr.service.IProductTemplateAttrService;
import com.ryskoo.catering.producttemplateattrvalue.domain.ProductTemplateAttrValuePO;
import com.ryskoo.framework.core.bean.ReturnMessageDTO;
import com.ryskoo.framework.core.controller.BasicHandler;
import com.ryskoo.util.ProductTemplateAttrInteractiveDTO;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;

import java.util.ArrayList;
import java.util.List;

@Controller("productTemplateAttrController")
@RequestMapping("/vendor/cater/producttemplateattr")
public class ProductTemplateAttrController extends BasicHandler<ProductTemplateAttrPO> {

    private static final String TEMPLATE_PATH = "system/producttemplateattr";

    private static final String MODULE_NAME = "ProductTemplateAttr";

    /**
     * 基类构造方法.
     */
    public ProductTemplateAttrController() {
        super(TEMPLATE_PATH, MODULE_NAME);
    }

    private IProductTemplateAttrService productTemplateAttrService;

    @Autowired
    private IIndustryService industryService;

    @Autowired
    public void setService(IProductTemplateAttrService productTemplateAttrService) {
        this.productTemplateAttrService = productTemplateAttrService;
        super.setService(productTemplateAttrService);
    }

    /**
     * 重写基类方法，构造数据传到列表页
     */
    @Override
    protected void buildListPageData(Model model, HttpServletRequest request) {
        // 获取行业类型
    	List<IndustryPO> industrys = industryService.getAll();
    	model.addAttribute("industrys", industrys);
    }

    /**
     * 保存属性
     * @param productTemplateAttrInteractiveDTO
     * @return
     */
    @PostMapping("/save")
    @ResponseBody
    public ReturnMessageDTO saveAttr(@RequestBody ProductTemplateAttrInteractiveDTO productTemplateAttrInteractiveDTO){
        ProductTemplateAttrPO productTemplateAttrDTO = new ProductTemplateAttrPO();
        // 1.构造属性基础信息
        this.genAttrInfo(productTemplateAttrDTO,productTemplateAttrInteractiveDTO);
        // 2.构造属性值信息
        this.genAttrValueInfo(productTemplateAttrDTO,productTemplateAttrInteractiveDTO);
        return super.add(productTemplateAttrDTO);
    }

    @PostMapping("/update")
    @ResponseBody
    public ReturnMessageDTO updateAttr(@RequestBody ProductTemplateAttrInteractiveDTO productTemplateAttrInteractiveDTO){
        ProductTemplateAttrPO productTemplateAttrDTO = new ProductTemplateAttrPO();
        // 1.构造属性基础信息
        this.genAttrInfo(productTemplateAttrDTO,productTemplateAttrInteractiveDTO);
        // 2.构造属性值信息
        this.genAttrValueInfo(productTemplateAttrDTO,productTemplateAttrInteractiveDTO);
        return super.edit(productTemplateAttrDTO);
    }

    /**
     * 构造属性值信息
     * @param productTemplateAttrDTO
     * @param productTemplateAttrInteractiveDTO
     */
    private void genAttrValueInfo(ProductTemplateAttrPO productTemplateAttrDTO, ProductTemplateAttrInteractiveDTO productTemplateAttrInteractiveDTO) {
        List<ProductTemplateAttrValuePO> valueList = new ArrayList<>();
        String[] values = productTemplateAttrInteractiveDTO.getAttrValues();
        if(null!=values){
            for (int i = 0;i<values.length;i++) {
                ProductTemplateAttrValuePO valueDTO = new ProductTemplateAttrValuePO();
                valueDTO.setValue(values[i]);
                valueDTO.setPosition(i);
                valueList.add(valueDTO);
            }
        }
        productTemplateAttrDTO.setValues(valueList);
    }

    /**
     * 构造属性基础信息
     * @param productTemplateAttrDTO
     * @param productTemplateAttrInteractiveDTO
     */
    private void genAttrInfo(ProductTemplateAttrPO productTemplateAttrDTO, ProductTemplateAttrInteractiveDTO productTemplateAttrInteractiveDTO) {
        productTemplateAttrDTO.setUuid(productTemplateAttrInteractiveDTO.getUuid());
        productTemplateAttrDTO.setIndustryUuid(productTemplateAttrInteractiveDTO.getIndustryUuid());
        productTemplateAttrDTO.setIndustryName(productTemplateAttrInteractiveDTO.getIndustryName());
        productTemplateAttrDTO.setName(productTemplateAttrInteractiveDTO.getName());
        productTemplateAttrDTO.setSpec(productTemplateAttrInteractiveDTO.isSpec());
        productTemplateAttrDTO.setPosition(productTemplateAttrInteractiveDTO.getPosition());
    }
}
